From: Florian Müllner Date: Fri, 19 May 2023 14:36:39 +0000 (+0200) Subject: backgroundApps: Track apps instead of instances X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~337^2~2^2~52 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=6cf0df5fb94fef1e6ab1f06030a17c877550d804;p=gnome-shell.git backgroundApps: Track apps instead of instances The background apps menu currently tracks instances rather than apps. That matches the behavior of `flatpak ps` and can be useful, for example when one particular instance runs out of control. But as we don't include any information that allows to actually distinguish between instances, multiple instances appear simply as duplicated app entries. Given that a menu is too limited for detailed information, stop representing individual instances, and track apps instead. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6654 Part-of: --- diff --git a/js/ui/status/backgroundApps.js b/js/ui/status/backgroundApps.js index 204d0e498..6fd22ea1e 100644 --- a/js/ui/status/backgroundApps.js +++ b/js/ui/status/backgroundApps.js @@ -24,9 +24,6 @@ var BackgroundAppMenuItem = GObject.registerClass({ 'app': GObject.ParamSpec.object('app', '', '', GObject.ParamFlags.READWRITE, Shell.App), - 'instance': GObject.ParamSpec.int64('instance', '', '', - GObject.ParamFlags.READWRITE, - -1, GLib.MAXINT64_BIGINT, -1), 'message': GObject.ParamSpec.string('message', '', '', GObject.ParamFlags.READWRITE, null), @@ -36,16 +33,13 @@ var BackgroundAppMenuItem = GObject.registerClass({ const message = params.message; delete params.message; - const instance = params.instance; - delete params.instance; - super._init(app.get_name(), app.get_icon(), { activate: false, reactive: false, ...params, }); - this.set({message, instance}); + this.set({message}); this.add_style_class_name('background-app-item'); this.label.add_style_class_name('title'); @@ -134,7 +128,7 @@ var BackgroundAppMenuItem = GObject.registerClass({ null); } catch (_error) { try { - Util.trySpawn(['flatpak', 'kill', this.instance]); + Util.trySpawn(['flatpak', 'kill', appId]); } catch (pidError) { logError(pidError, 'Failed to kill application'); } @@ -213,39 +207,42 @@ class BackgroundAppsToggle extends QuickToggle { const {BackgroundApps: backgroundApps} = this._proxy; - const nBackgroundApps = backgroundApps?.length ?? 0; - this.title = nBackgroundApps === 0 - ? _('No Background Apps') - : ngettext( - '%d Background App', - '%d Background Apps', - nBackgroundApps).format(nBackgroundApps); - this._listTitle.visible = nBackgroundApps > 0; - this._appsSection.removeAll(); - if (!backgroundApps) - return; - - backgroundApps + const items = new Map(); + (backgroundApps ?? []) .map(backgroundApp => { const appId = backgroundApp.app_id.deepUnpack(); const app = this._appSystem.lookup_app(`${appId}.desktop`); const message = backgroundApp.message?.deepUnpack(); - const instance = backgroundApp.instance.deepUnpack(); - return {app, message, instance}; + return {app, message}; }) .sort((a, b) => { return a.app.get_name().localeCompare(b.app.get_name()); }) .forEach(backgroundApp => { - const {app, message, instance} = backgroundApp; + const {app, message} = backgroundApp; + + let item = items.get(app); + if (!item) { + item = new BackgroundAppMenuItem(app); + items.set(app, item); + this._appsSection.addMenuItem(item); + } - const item = new BackgroundAppMenuItem(app, - {instance, message}); - this._appsSection.addMenuItem(item); + if (message) + item.set({message}); }); + + const nBackgroundApps = items.size; + this.title = nBackgroundApps === 0 + ? _('No Background Apps') + : ngettext( + '%d Background App', + '%d Background Apps', + nBackgroundApps).format(nBackgroundApps); + this._listTitle.visible = nBackgroundApps > 0; } vfunc_clicked() {